#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include<QWebSocket>
#include<QString>
#include<QStack>
#include<QMap>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);

    ~MainWindow();

private slots:
    void on_OpenSerialButton_clicked();

    void ReadData();

    void on_SendButton_clicked();

    void on_pushButton_clicked();

    void on_btn_connect_clicked();

    void onWsRecievedMessage(const QString &text);

    void slOnQueuePush(const QString &mac );

    void slOnQueuePop(const QString &mac);

    void on_pushButton__write_clicked();

private:
    Ui::MainWindow *ui;
    QSerialPort *serial;
    QWebSocket *ws ;
    QNetworkRequest request;
    QString mac ="";  // 硬件的编号地址
    QStack<QString> queue_sub_mac;   // 请求获取子结点数据队列
    QMap <QString,bool> map_router;  // 保存子结点的地址作为路由表
    QString nowNode;                 // 当前结点保存的地址
    /**
     * @brief prSetMac
     * // 设置 mac 地址
     * @param addr
     * addr 是地址的参数
     *
     * note:该函数调用会发送 macHadChaned 信号
     */
    void prSetMac(const QString addr);



signals:

    void macHadChaned(const QString & addr);   //当mac 发生变化的时候 发送该信息号

    void onQueuePush(const QString & back);    //向stack中增加数据 , emit this signal

    void onQueuePop(const QString & top) ;    //当queue 数据的时候 ,emit  this signal

};

#endif // MAINWINDOW_H
